<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/html">
<head>
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

	<title>Ply :: Tests</title>

	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
	<script src="http://cdnjs.cloudflare.com/ajax/libs/qunit/1.14.0/qunit.min.js"></script>
	<link href="http://cdnjs.cloudflare.com/ajax/libs/qunit/1.14.0/qunit.css" rel="stylesheet"/>


	<script>
		if (!window.jQuery) {
			document.write('<script src="http://local.git/js/jquery.dev.js"><' + '/script>');
			document.write('<script src="http://local.git/js/qunit/qunit.js"><' + '/script>');
			document.write('<link href="http://local.git/js/qunit/qunit.css" rel="stylesheet"/>');
		}

		if (/state=2/.test(location)) {
//			document.write('<script src="http://local.git/JSSDK/Promise/Promise.js"><' + '/script>');
		}
	</script>

	<script>
		(function () {
			var defaultOptions = {
				x: 0,
				y: 0,
				button: 0,
				ctrlKey: false,
				altKey: false,
				shiftKey: false,
				metaKey: false,
				bubbles: true,
				cancelable: true
			};


			var eventMatchers = {
				'HTMLEvents': /^(?:load|unload|abort|error|select|change|submit|reset|focus|input|keydown|keyup|blur|resize|scroll)$/,
				'MouseEvents': /^(?:click|dblclick|mouse(?:down|up|over|move|out))$/
			};


			window.isPhantomJS = /phantomjs/i.test(navigator.userAgent);

			window.simulateEvent = function (element, eventName, opts) {
				var options = $.extend({}, defaultOptions, opts || {});
				var oEvent, eventType = null;

				for (var name in eventMatchers) {
					if (eventMatchers[name].test(eventName)) {
						eventType = name;
						break;
					}
				}

				if (!eventType) {
					throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported');
				}

				if (document.createEvent) {
					oEvent = document.createEvent(eventType);
					if (eventType == 'HTMLEvents') {
						oEvent.initEvent(eventName, options.bubbles, options.cancelable);
					}
					else {
						oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, window,
								options.button, options.x, options.y, options.x, options.y,
								options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, element);
					}
					$.extend(oEvent, options);
					element.dispatchEvent(oEvent);
				}
				else {
					options.clientX = options.x;
					options.clientY = options.y;
					oEvent = $.extend(document.createEventObject(), options);
					element.fireEvent('on' + eventName, oEvent);
				}
				return element;
			};


			window.promiseTest = function (name, promise) {
				asyncTest(name, function () {
					promise().then(function () {
						start();
					}, function (err) {
						equal([err, err.stack], null, 'fail');
						start();
					});
				});
			};

			function _htmlNormalize(html) {
				if (typeof html === 'string') {
					html =  html.replace(/<\/?\w+/g, function (match) {
						return match.toLowerCase();
					});
				}
				return html;
			}

			window.equalHtml = function (actual, expected, message) {
				equal(_htmlNormalize(actual), _htmlNormalize(expected), message);
			};
		})();
	</script>

</head>
<body>

	<h1 id="qunit-header">Ply :: tests</h1>
	<h2 id="qunit-banner"></h2>
	<div id="qunit-testrunner-toolbar"></div>
	<h2 id="qunit-userAgent"></h2>
	<ol id="qunit-tests"></ol>
	<div id="playground"></div>


	<!-- lib:css -->
		<link href="../ply.css" rel="stylesheet"/>

	<!-- lib:src -->
		<script src="../Ply.js"></script>
		<script src="../Ply.ui.js"></script>
		<script>!window.Ply && document.write('<script src="../Ply.min.js"><' + '/script>');</script>

	<!-- lib:tests -->
		<script src="./Ply.tests.js"></script>
		<script src="./Ply.dom.tests.js"></script>
		<script src="./Ply.stack.tests.js"></script>
		<script src="./Ply.effects.tests.js"></script>
		<script src="./Ply.ui.tests.js"></script>

	<script>
		if (parent.resolveTest) {
			test('end', function () {
				expect(0);
				parent.resolveTest();
			});
		}
	</script>
</body>
</html>
